package sige

class RelatorioMensalService {
    
    private def getSoma(Date mes, Long id){
       
        def results = Pagamento.withCriteria{
            Calendar c = mes.toCalendar()
            c[Calendar.DAY_OF_MONTH] = 1
            Date inicio = c.time
            c[Calendar.DATE] = c.getActualMaximum(Calendar.DATE)
            Date fim = c.time
            between('dataDePagamento', inicio, fim)
            movimentacao {
                ordem{
                    eq('id', id)
                }
            }
            projections {
                sum('total')
            }
        }
        
        if(!results[0]){
            return 0
        }
        results[0]
    }
    
    def getOrdens(String tipo , Date mes){
        def ordens = Ordem.withCriteria{
            eq('tipo', tipo)
        }
        def ordensInstance = [:]
        ordens.each{
            ordensInstance += [ "${it.nome}" : getSoma(mes, it.id) ]
        }
        ordensInstance
    }
    
    long getTotal(def map){
        long soma = 0
        map.each{
            soma += it.value
        }
        soma
    }
}









